
package com.code.generator.builder;

import java.util.HashMap;
import java.util.Map;


import com.code.generator.GeneratorUtils;
import com.code.generator.entity.TableEntity;
import com.code.view.entity.HandlerVO;

import freemarker.template.Configuration;

/**
 * 构造器基础类接口
 *
 * @author 朱国军
 * @version 2015年3月11日 朱国军
 */
public abstract class BaseBuilder {
    
    /**
     * 生成代码
     *
     * @param tableEntity 数据库表对象
     * @param packagePath 包路径
     * @param handlerVO 代码生成器界面设置内容
     * @param cfg 模版配置对象
     * @return 是否生成成功
     */
    public abstract boolean builder(TableEntity tableEntity, String packagePath, HandlerVO handlerVO, Configuration cfg);
    
    /**
     * 构造模版需要的数据
     *
     * @param tableEntity 数据库表对象
     * @param packagePath 包路径
     * @param handlerVO 代码生成器界面设置内容
     * @return 模版需要的数据
     */
    protected Map<String, Object> getDataMap(TableEntity tableEntity, String packagePath, HandlerVO handlerVO) {
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("table", tableEntity);
        dataMap.put("columns", tableEntity.getColumnsEntitys());
        dataMap.put("classPath", packagePath);
        dataMap.put("commonPackage", handlerVO.getCommonPackage());
        dataMap.put("author", handlerVO.getAuthor());
        dataMap.put("currentDate", GeneratorUtils.getCurrentDate());
        dataMap.put("entitySuffix", handlerVO.getEntitySuffix());
        if (handlerVO.getMyBatis().getSelection()) {
            dataMap.put("braceStart", "#{");
            dataMap.put("braceEnd", "}");
        } else {
            dataMap.put("braceStart", "#");
            dataMap.put("braceEnd", "#");
        }
        dataMap.put("emailCharacter", "@");
        dataMap.put("phoneCharacter", "#");
        return dataMap;
    }
    
}
